#include <stdio.h>
#include <stdlib.h> //exit函数需调用的头文件
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char* argv[]){ //使用argv[1]获取第一个字符串参数即要读取的文件名
  if(argc == 2){
    int f = open(argv[1],O_RDONLY);
    if(f == -1) printf("file cannot found\n");
    else{
      struct stat buf;
      if(!stat(argv[1],&buf) && !S_ISDIR(buf.st_mode)){ //判断是否满足不是目录的条件
        int size;
        char str[16] = {0};
        while(size = read(f,str,16)){ //循环读取，每次读取并输出读取到的实际长度（read函数要在循环里，以移动文件指针，否则只会循环输出文件前16字节）
          write(0,str,size);  //write函数fd参数设为0时会将读取的数据输出到终端（0为标准输入，使用该文件描述符会将内容显示在终端）
        }
      }
      else{
				if(stat(argv[1],&buf) == -1){ perror(argv[1]); exit(1); }
				if(S_ISDIR(buf.st_mode)) printf("%s is a directory\n",argv[1]);
			}
    }
    close(f);
  }
  else printf("filename error\n");
	return 0;
}